package cn.kgc.mybatis.day01.mybatis;

import cn.kgc.mybatis.day01.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

/**
 * @author 课工场
 * @date 2024/10/24
 * @description  mybatis框架的基本使用
 * 每个基于MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。
 * SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
 * 而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例
 */
public class TestMybatis {

    public static void main(String[] args)  {

        //  MyBatis 包含一个名叫 Resources 的工具类，它包含一些实用方法，使得从类路径或其它位置加载资源文件更加容易

        try {

            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
            //  SqlSessionFactoryBuilder    mybatis-config.xml
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            //既然有了 SqlSessionFactory，顾名思义，我们可以从中获得 SqlSession 的实例。
            // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
            SqlSession sqlSession = factory.openSession();
            // 执行sql操作
            // List<User> users = sqlSession.selectList("user.list");
            // users.forEach(System.out::println);
            User user = sqlSession.selectOne("user.getOne", 2);
            System.out.println("user = " + user);

        }catch (Exception e){
           e.printStackTrace();
        }

    }
}
